package com.baizhi.reflect2;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 通过反射获取成员方法,并调用
 */
public class MethodDemo1 {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //1. 获取类的对象
        Class<Person> pClass = Person.class;
        //2. 获取构造函数
        Constructor<Person> con = pClass.getConstructor(String.class);

        //3. 通过构造函数创建Person对象
        Person person = con.newInstance("王云爽");

        //4. 获取成员方法
       // person.method1(); 公共方法可以直接执行

        Method m1 = pClass.getMethod("method1", null);
        Method m2 = pClass.getMethod("method2",String.class);
        Method m3 = pClass.getMethod("method3",null);
        Method m5 = pClass.getDeclaredMethod("method5", null); //因为私有

        //5. 调用成员方法
        m1.invoke(person,null);
        m2.invoke(person, "赵云");
        Object o = m3.invoke(person, null); //o是method3方法的返回值
        System.out.println(o);

        System.out.println(m5);
        //接触java 给定m5的访问权限private
        m5.setAccessible(true);

        m5.invoke(person, null);



    }
}
